{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2天学会Pandas"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 目录\n",
    "## 0.导语\n",
    "## 1.Series\n",
    "## 2.DataFrame\n",
    "### 2.1 DataFrame的简单运用\n",
    "\n",
    "## 3.pandas选择数据\n",
    "### 3.1 实战筛选\n",
    "### 3.2 筛选总结\n",
    "\n",
    "## 4.Pandas设置值\n",
    "### 4.1 创建数据\n",
    "### 4.2 根据位置设置loc和iloc\n",
    "### 4.3 根据条件设置\n",
    "### 4.4 按行或列设置\n",
    "### 4.5 添加Series序列(长度必须对齐)\n",
    "### 4.6 设定某行某列为特定值\n",
    "### 4.7 修改一整行数据\n",
    "\n",
    "## 5.Pandas处理丢失数据\n",
    "### 5.1 创建含NaN的矩阵\n",
    "### 5.2 删除掉有NaN的行或列\n",
    "### 5.3 替换NaN值为0或者其他\n",
    "### 5.4 是否有缺失数据NaN\n",
    "\n",
    "## 6.Pandas导入导出\n",
    "### 6.1 导入数据\n",
    "### 6.2 导出数据\n",
    "\n",
    "## 7.Pandas合并操作\n",
    "### 7.1 Pandas合并concat\n",
    "### 7.2.Pandas 合并 merge\n",
    "    *  7.2.1 定义资料集并打印出\n",
    "    *  7.2.2 依据key column合并,并打印\n",
    "    *  7.2.3 两列合并\n",
    "    *  7.2.4 Indicator设置合并列名称\n",
    "    *  7.2.5 依据index合并\n",
    "    *  7.2.6 解决overlapping的问题\n",
    "\n",
    "## 8.Pandas plot出图\n",
    "\n",
    "## 9.学习来源"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 0.导语"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Pandas是基于Numpy构建的，让Numpy为中心的应用变得更加简单。\n",
    "\n",
    "本文作者：光城"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.Series"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0     1.0\n",
      "1     3.0\n",
      "2     6.0\n",
      "3     NaN\n",
      "4    44.0\n",
      "5     1.0\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "# Series\n",
    "s = pd.Series([1,3,6,np.nan,44,1])\n",
    "print(s)\n",
    "# 默认index从0开始,如果想要按照自己的索引设置，则修改index参数,如:index=[3,4,3,7,8,9]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.DataFrame"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1 DataFrame的简单运用"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                   a         b         c         d\n",
      "2018-08-19 -0.493739 -1.308738  0.261489  1.322140\n",
      "2018-08-20 -1.738107  0.699740  1.483715  1.103715\n",
      "2018-08-21  1.843806  0.636613 -0.605184 -0.809692\n",
      "2018-08-22 -0.044920  0.275286  1.536055  1.219944\n",
      "2018-08-23  0.688810 -0.870828 -0.424904 -1.369430\n",
      "2018-08-24 -0.670488  0.175906  0.214264 -1.099845\n"
     ]
    }
   ],
   "source": [
    "# DataFrame\n",
    "dates = pd.date_range('2018-08-19',periods=6)\n",
    "# dates = pd.date_range('2018-08-19','2018-08-24') # 起始、结束  与上述等价\n",
    "'''\n",
    "numpy.random.randn(d0, d1, …, dn)是从标准正态分布中返回一个或多个样本值。\n",
    "numpy.random.rand(d0, d1, …, dn)的随机样本位于[0, 1)中。\n",
    "(6,4)表示6行4列数据\n",
    "'''\n",
    "df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['a','b','c','d'])\n",
    "print(df)\n",
    "# DataFrame既有行索引也有列索引， 它可以被看做由Series组成的大字典。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-08-19   -1.308738\n",
      "2018-08-20    0.699740\n",
      "2018-08-21    0.636613\n",
      "2018-08-22    0.275286\n",
      "2018-08-23   -0.870828\n",
      "2018-08-24    0.175906\n",
      "Freq: D, Name: b, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(df['b'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   0  1   2   3\n",
      "0  0  1   2   3\n",
      "1  4  5   6   7\n",
      "2  8  9  10  11\n"
     ]
    }
   ],
   "source": [
    "# 未指定行标签和列标签的数据\n",
    "df1 = pd.DataFrame(np.arange(12).reshape(3,4))\n",
    "print(df1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   A          B     C  D      E    F\n",
      "0  1 2018-08-19   1.0  3   test  foo\n",
      "1  2 2018-08-19   6.0  3  train  foo\n",
      "2  3 2018-08-19   9.0  3   test  foo\n",
      "3  4 2018-08-19  10.0  3  train  foo\n"
     ]
    }
   ],
   "source": [
    "# 另一种方式\n",
    "df2 = pd.DataFrame({\n",
    "    'A': [1,2,3,4],\n",
    "    'B': pd.Timestamp('20180819'),\n",
    "    'C': pd.Series([1,6,9,10],dtype='float32'),\n",
    "    'D': np.array([3] * 4,dtype='int32'),\n",
    "    'E': pd.Categorical(['test','train','test','train']),\n",
    "    'F': 'foo'\n",
    "})\n",
    "print(df2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RangeIndex(start=0, stop=4, step=1)\n"
     ]
    }
   ],
   "source": [
    "print(df2.index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')\n"
     ]
    }
   ],
   "source": [
    "print(df2.columns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1 Timestamp('2018-08-19 00:00:00') 1.0 3 'test' 'foo']\n",
      " [2 Timestamp('2018-08-19 00:00:00') 6.0 3 'train' 'foo']\n",
      " [3 Timestamp('2018-08-19 00:00:00') 9.0 3 'test' 'foo']\n",
      " [4 Timestamp('2018-08-19 00:00:00') 10.0 3 'train' 'foo']]\n"
     ]
    }
   ],
   "source": [
    "print(df2.values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              A          C    D\n",
      "count  4.000000   4.000000  4.0\n",
      "mean   2.500000   6.500000  3.0\n",
      "std    1.290994   4.041452  0.0\n",
      "min    1.000000   1.000000  3.0\n",
      "25%    1.750000   4.750000  3.0\n",
      "50%    2.500000   7.500000  3.0\n",
      "75%    3.250000   9.250000  3.0\n",
      "max    4.000000  10.000000  3.0\n"
     ]
    }
   ],
   "source": [
    "# 数据总结\n",
    "print(df2.describe())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                     0                    1                    2  \\\n",
      "A                    1                    2                    3   \n",
      "B  2018-08-19 00:00:00  2018-08-19 00:00:00  2018-08-19 00:00:00   \n",
      "C                    1                    6                    9   \n",
      "D                    3                    3                    3   \n",
      "E                 test                train                 test   \n",
      "F                  foo                  foo                  foo   \n",
      "\n",
      "                     3  \n",
      "A                    4  \n",
      "B  2018-08-19 00:00:00  \n",
      "C                   10  \n",
      "D                    3  \n",
      "E                train  \n",
      "F                  foo  \n"
     ]
    }
   ],
   "source": [
    "# 翻转数据\n",
    "print(df2.T)\n",
    "# print(np.transpose(df2))等价于上述操作"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   A          B     C  D      E    F\n",
      "0  1 2018-08-19   1.0  3   test  foo\n",
      "1  2 2018-08-19   6.0  3  train  foo\n",
      "2  3 2018-08-19   9.0  3   test  foo\n",
      "3  4 2018-08-19  10.0  3  train  foo\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "axis=1表示行\n",
    "axis=0表示列\n",
    "默认ascending(升序)为True\n",
    "ascending=True表示升序,ascending=False表示降序\n",
    "下面两行分别表示按行升序与按行降序\n",
    "'''\n",
    "print(df2.sort_index(axis=1,ascending=True))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     F      E  D     C          B  A\n",
      "0  foo   test  3   1.0 2018-08-19  1\n",
      "1  foo  train  3   6.0 2018-08-19  2\n",
      "2  foo   test  3   9.0 2018-08-19  3\n",
      "3  foo  train  3  10.0 2018-08-19  4\n"
     ]
    }
   ],
   "source": [
    "print(df2.sort_index(axis=1,ascending=False))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   A          B     C  D      E    F\n",
      "3  4 2018-08-19  10.0  3  train  foo\n",
      "2  3 2018-08-19   9.0  3   test  foo\n",
      "1  2 2018-08-19   6.0  3  train  foo\n",
      "0  1 2018-08-19   1.0  3   test  foo\n"
     ]
    }
   ],
   "source": [
    "# 表示按列降序与按列升序\n",
    "print(df2.sort_index(axis=0,ascending=False))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   A          B     C  D      E    F\n",
      "0  1 2018-08-19   1.0  3   test  foo\n",
      "1  2 2018-08-19   6.0  3  train  foo\n",
      "2  3 2018-08-19   9.0  3   test  foo\n",
      "3  4 2018-08-19  10.0  3  train  foo\n"
     ]
    }
   ],
   "source": [
    "print(df2.sort_index(axis=0,ascending=True))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   A          B     C  D      E    F\n",
      "3  4 2018-08-19  10.0  3  train  foo\n",
      "2  3 2018-08-19   9.0  3   test  foo\n",
      "1  2 2018-08-19   6.0  3  train  foo\n",
      "0  1 2018-08-19   1.0  3   test  foo\n"
     ]
    }
   ],
   "source": [
    "# 对特定列数值排列\n",
    "# 表示对C列降序排列\n",
    "print(df2.sort_values(by='C',ascending=False))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.pandas选择数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1 实战筛选"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A   B   C   D\n",
      "2018-08-19   0   1   2   3\n",
      "2018-08-20   4   5   6   7\n",
      "2018-08-21   8   9  10  11\n",
      "2018-08-22  12  13  14  15\n",
      "2018-08-23  16  17  18  19\n",
      "2018-08-24  20  21  22  23\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "dates = pd.date_range('20180819', periods=6)\n",
    "df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D'])\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-08-19     0\n",
      "2018-08-20     4\n",
      "2018-08-21     8\n",
      "2018-08-22    12\n",
      "2018-08-23    16\n",
      "2018-08-24    20\n",
      "Freq: D, Name: A, dtype: int32\n"
     ]
    }
   ],
   "source": [
    "# 检索A列\n",
    "print(df['A'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-08-19     0\n",
      "2018-08-20     4\n",
      "2018-08-21     8\n",
      "2018-08-22    12\n",
      "2018-08-23    16\n",
      "2018-08-24    20\n",
      "Freq: D, Name: A, dtype: int32\n"
     ]
    }
   ],
   "source": [
    "print(df.A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "            A  B   C   D\n",
      "2018-08-19  0  1   2   3\n",
      "2018-08-20  4  5   6   7\n",
      "2018-08-21  8  9  10  11\n"
     ]
    }
   ],
   "source": [
    "# 选择跨越多行或多列\n",
    "# 选取前3行\n",
    "print(df[0:3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "            A  B   C   D\n",
      "2018-08-19  0  1   2   3\n",
      "2018-08-20  4  5   6   7\n",
      "2018-08-21  8  9  10  11\n"
     ]
    }
   ],
   "source": [
    "print(df['2018-08-19':'2018-08-21'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A    0\n",
      "B    1\n",
      "C    2\n",
      "D    3\n",
      "Name: 2018-08-19 00:00:00, dtype: int32\n"
     ]
    }
   ],
   "source": [
    "# 根据标签选择数据\n",
    "# 获取特定行或列\n",
    "# 指定行数据\n",
    "print(df.loc['20180819'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A   B\n",
      "2018-08-19   0   1\n",
      "2018-08-20   4   5\n",
      "2018-08-21   8   9\n",
      "2018-08-22  12  13\n",
      "2018-08-23  16  17\n",
      "2018-08-24  20  21\n"
     ]
    }
   ],
   "source": [
    "# 指定列\n",
    "# 两种方式\n",
    "print(df.loc[:,'A':'B'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A   B\n",
      "2018-08-19   0   1\n",
      "2018-08-20   4   5\n",
      "2018-08-21   8   9\n",
      "2018-08-22  12  13\n",
      "2018-08-23  16  17\n",
      "2018-08-24  20  21\n"
     ]
    }
   ],
   "source": [
    "print(df.loc[:,['A','B']])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A    0\n",
      "B    1\n",
      "Name: 2018-08-19 00:00:00, dtype: int32\n"
     ]
    }
   ],
   "source": [
    "# 行与列同时检索\n",
    "print(df.loc['20180819',['A','B']])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "13\n"
     ]
    }
   ],
   "source": [
    "# 根据序列iloc\n",
    "# 获取特定位置的值\n",
    "print(df.iloc[3,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             B   C\n",
      "2018-08-22  13  14\n",
      "2018-08-23  17  18\n"
     ]
    }
   ],
   "source": [
    "print(df.iloc[3:5,1:3]) # 不包含末尾5或3，同列表切片"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             B   C\n",
      "2018-08-20   5   6\n",
      "2018-08-22  13  14\n",
      "2018-08-24  21  22\n"
     ]
    }
   ],
   "source": [
    "# 跨行操作\n",
    "print(df.iloc[[1,3,5],1:3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "            A   C\n",
      "2018-08-19  0   2\n",
      "2018-08-20  4   6\n",
      "2018-08-21  8  10\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:2: DeprecationWarning: \n",
      ".ix is deprecated. Please use\n",
      ".loc for label based indexing or\n",
      ".iloc for positional indexing\n",
      "\n",
      "See the documentation here:\n",
      "http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "# 混合选择\n",
    "print(df.ix[:3,['A','C']])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "            A   C\n",
      "2018-08-19  0   2\n",
      "2018-08-20  4   6\n",
      "2018-08-21  8  10\n"
     ]
    }
   ],
   "source": [
    "print(df.iloc[:3,[0,2]]) # 结果同上"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A   B   C   D\n",
      "2018-08-22  12  13  14  15\n",
      "2018-08-23  16  17  18  19\n",
      "2018-08-24  20  21  22  23\n"
     ]
    }
   ],
   "source": [
    "# 通过判断的筛选\n",
    "print(df[df.A>8])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A   B   C   D\n",
      "2018-08-22  12  13  14  15\n",
      "2018-08-23  16  17  18  19\n",
      "2018-08-24  20  21  22  23\n"
     ]
    }
   ],
   "source": [
    "# 通过判断的筛选\n",
    "print(df.loc[df.A>8])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 3.2 筛选总结"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1.iloc与ix区别\n",
    "  > 总结:相同点：iloc可以取相应的值，操作方便,与ix操作类似。\n",
    "  \n",
    "  > 不同点：ix可以混合选择，可以填入column对应的字符选择，而iloc只能采用index索引，对于列数较多情况下，ix要方便操作许多。\n",
    "  \n",
    "2.loc与iloc区别\n",
    "  > 总结：相同点：都可以索引处块数据\n",
    "  \n",
    "  > 不同点：iloc可以检索对应值,两者操作不同。\n",
    "  \n",
    "3.ix与loc、iloc三者的区别\n",
    "  > n总结：ix是混合loc与iloc操作\n",
    "  \n",
    "如下:对比三者操作,输出结果相同"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A    0\n",
      "B    1\n",
      "Name: 2018-08-19 00:00:00, dtype: int32\n",
      "A    0\n",
      "B    1\n",
      "Name: 2018-08-19 00:00:00, dtype: int32\n",
      "A    0\n",
      "B    1\n",
      "Name: 2018-08-19 00:00:00, dtype: int32\n"
     ]
    }
   ],
   "source": [
    "print(df.loc['20180819','A':'B'])\n",
    "print(df.iloc[0,0:2])\n",
    "print(df.ix[0,'A':'B'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4.Pandas设置值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.1 创建数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A   B   C   D\n",
      "2018-08-20   0   1   2   3\n",
      "2018-08-21   4   5   6   7\n",
      "2018-08-22   8   9  10  11\n",
      "2018-08-23  12  13  14  15\n",
      "2018-08-24  16  17  18  19\n",
      "2018-08-25  20  21  22  23\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "# 创建数据\n",
    "dates = pd.date_range('20180820',periods=6)\n",
    "df = pd.DataFrame(np.arange(24).reshape(6,4), index=dates, columns=['A','B','C','D'])\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.2 根据位置设置loc和iloc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A     B    C   D\n",
      "2018-08-20   0  2222    2   3\n",
      "2018-08-21   4     5    6   7\n",
      "2018-08-22   8     9  111  11\n",
      "2018-08-23  12    13   14  15\n",
      "2018-08-24  16    17   18  19\n",
      "2018-08-25  20    21   22  23\n"
     ]
    }
   ],
   "source": [
    "# 根据位置设置loc和iloc\n",
    "df.iloc[2,2] = 111\n",
    "df.loc['20180820','B'] = 2222\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.3 根据条件设置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A     B    C   D\n",
      "2018-08-20   0  2222    2   3\n",
      "2018-08-21   4     5    6   7\n",
      "2018-08-22   8     0  111  11\n",
      "2018-08-23  12     0   14  15\n",
      "2018-08-24  16     0   18  19\n",
      "2018-08-25  20     0   22  23\n"
     ]
    }
   ],
   "source": [
    "# 根据条件设置\n",
    "# 更改B中的数，而更改的位置取决于4的位置，并设相应位置的数为0\n",
    "df.B[df.A>4] = 0\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A     B    C   D\n",
      "2018-08-20   0  2222    2   3\n",
      "2018-08-21   4     5    6   7\n",
      "2018-08-22   8     0  111  11\n",
      "2018-08-23  12     0   14  15\n",
      "2018-08-24  16     0   18  19\n",
      "2018-08-25  20     0   22  23\n"
     ]
    }
   ],
   "source": [
    "df.B.loc[df.A>4] = 0\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.4 按行或列设置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A     B    C   D   F\n",
      "2018-08-20   0  2222    2   3 NaN\n",
      "2018-08-21   4     5    6   7 NaN\n",
      "2018-08-22   8     0  111  11 NaN\n",
      "2018-08-23  12     0   14  15 NaN\n",
      "2018-08-24  16     0   18  19 NaN\n",
      "2018-08-25  20     0   22  23 NaN\n"
     ]
    }
   ],
   "source": [
    "# 按行或列设置\n",
    "# 列批处理，F列全改为NaN\n",
    "df['F'] = np.nan\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.5 添加Series序列(长度必须对齐)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A     B    C   D   F  E\n",
      "2018-08-20   0  2222    2   3 NaN  1\n",
      "2018-08-21   4     5    6   7 NaN  2\n",
      "2018-08-22   8     0  111  11 NaN  3\n",
      "2018-08-23  12     0   14  15 NaN  4\n",
      "2018-08-24  16     0   18  19 NaN  5\n",
      "2018-08-25  20     0   22  23 NaN  6\n"
     ]
    }
   ],
   "source": [
    "df['E'] = pd.Series([1,2,3,4,5,6], index=pd.date_range('20180820',periods=6))\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.6 设定某行某列为特定值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A     B    C   D   F  E\n",
      "2018-08-20  56  2222    2   3 NaN  1\n",
      "2018-08-21   4     5    6   7 NaN  2\n",
      "2018-08-22   8     0  111  11 NaN  3\n",
      "2018-08-23  12     0   14  15 NaN  4\n",
      "2018-08-24  16     0   18  19 NaN  5\n",
      "2018-08-25  20     0   22  23 NaN  6\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:2: DeprecationWarning: \n",
      ".ix is deprecated. Please use\n",
      ".loc for label based indexing or\n",
      ".iloc for positional indexing\n",
      "\n",
      "See the documentation here:\n",
      "http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "# 设定某行某列为特定值\n",
    "df.ix['20180820','A'] = 56\n",
    "print(df)\n",
    "#ix 以后要剥离了，尽量不要用了"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A     B    C   D   F  E\n",
      "2018-08-20  67  2222    2   3 NaN  1\n",
      "2018-08-21   4     5    6   7 NaN  2\n",
      "2018-08-22   8     0  111  11 NaN  3\n",
      "2018-08-23  12     0   14  15 NaN  4\n",
      "2018-08-24  16     0   18  19 NaN  5\n",
      "2018-08-25  20     0   22  23 NaN  6\n"
     ]
    }
   ],
   "source": [
    "df.loc['20180820','A'] = 67\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A     B    C   D   F  E\n",
      "2018-08-20  76  2222    2   3 NaN  1\n",
      "2018-08-21   4     5    6   7 NaN  2\n",
      "2018-08-22   8     0  111  11 NaN  3\n",
      "2018-08-23  12     0   14  15 NaN  4\n",
      "2018-08-24  16     0   18  19 NaN  5\n",
      "2018-08-25  20     0   22  23 NaN  6\n"
     ]
    }
   ],
   "source": [
    "df.iloc[0,0] = 76\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.7 修改一整行数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "               A       B      C     D   F    E\n",
      "2018-08-20  76.0  2222.0    2.0   3.0 NaN  1.0\n",
      "2018-08-21   NaN     NaN    NaN   NaN NaN  NaN\n",
      "2018-08-22   8.0     0.0  111.0  11.0 NaN  3.0\n",
      "2018-08-23  12.0     0.0   14.0  15.0 NaN  4.0\n",
      "2018-08-24  16.0     0.0   18.0  19.0 NaN  5.0\n",
      "2018-08-25  20.0     0.0   22.0  23.0 NaN  6.0\n"
     ]
    }
   ],
   "source": [
    "# 修改一整行数据\n",
    "df.iloc[1] = np.nan # df.iloc[1,:]=np.nan\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "               A    B      C     D   F    E\n",
      "2018-08-20   NaN  NaN    NaN   NaN NaN  NaN\n",
      "2018-08-21   NaN  NaN    NaN   NaN NaN  NaN\n",
      "2018-08-22   8.0  0.0  111.0  11.0 NaN  3.0\n",
      "2018-08-23  12.0  0.0   14.0  15.0 NaN  4.0\n",
      "2018-08-24  16.0  0.0   18.0  19.0 NaN  5.0\n",
      "2018-08-25  20.0  0.0   22.0  23.0 NaN  6.0\n"
     ]
    }
   ],
   "source": [
    "df.loc['20180820'] = np.nan # df.loc['20180820,:']=np.nan\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "               A    B     C     D   F    E\n",
      "2018-08-20   NaN  NaN   NaN   NaN NaN  NaN\n",
      "2018-08-21   NaN  NaN   NaN   NaN NaN  NaN\n",
      "2018-08-22   NaN  NaN   NaN   NaN NaN  NaN\n",
      "2018-08-23  12.0  0.0  14.0  15.0 NaN  4.0\n",
      "2018-08-24  16.0  0.0  18.0  19.0 NaN  5.0\n",
      "2018-08-25  20.0  0.0  22.0  23.0 NaN  6.0\n"
     ]
    }
   ],
   "source": [
    "df.ix[2] = np.nan # df.ix[2,:]=np.nan\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "               A    B     C     D   F    E\n",
      "2018-08-20   NaN  NaN   NaN   NaN NaN  NaN\n",
      "2018-08-21   NaN  NaN   NaN   NaN NaN  NaN\n",
      "2018-08-22   NaN  NaN   NaN   NaN NaN  NaN\n",
      "2018-08-23   NaN  NaN   NaN   NaN NaN  NaN\n",
      "2018-08-24  16.0  0.0  18.0  19.0 NaN  5.0\n",
      "2018-08-25  20.0  0.0  22.0  23.0 NaN  6.0\n"
     ]
    }
   ],
   "source": [
    "df.ix['20180823'] = np.nan\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5.Pandas处理丢失数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.1 创建含NaN的矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A   B   C   D\n",
      "2018-08-20   0   1   2   3\n",
      "2018-08-21   4   5   6   7\n",
      "2018-08-22   8   9  10  11\n",
      "2018-08-23  12  13  14  15\n",
      "2018-08-24  16  17  18  19\n",
      "2018-08-25  20  21  22  23\n"
     ]
    }
   ],
   "source": [
    "# Pandas处理丢失数据\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "# 创建含NaN的矩阵\n",
    "# 如何填充和删除NaN数据?\n",
    "dates = pd.date_range('20180820',periods=6)\n",
    "df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D']) \n",
    "print(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A     B     C   D\n",
      "2018-08-20   0   NaN   2.0   3\n",
      "2018-08-21   4   5.0   NaN   7\n",
      "2018-08-22   8   9.0  10.0  11\n",
      "2018-08-23  12  13.0  14.0  15\n",
      "2018-08-24  16  17.0  18.0  19\n",
      "2018-08-25  20  21.0  22.0  23\n"
     ]
    }
   ],
   "source": [
    "# a.reshape(6,4)等价于a.reshape((6,4))\n",
    "df.iloc[0,1] = np.nan\n",
    "df.iloc[1,2] = np.nan\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.2 删除掉有NaN的行或列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A     B     C   D\n",
      "2018-08-22   8   9.0  10.0  11\n",
      "2018-08-23  12  13.0  14.0  15\n",
      "2018-08-24  16  17.0  18.0  19\n",
      "2018-08-25  20  21.0  22.0  23\n"
     ]
    }
   ],
   "source": [
    "# 删除掉有NaN的行或列\n",
    "print(df.dropna()) # 默认是删除掉含有NaN的行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A     B     C   D\n",
      "2018-08-22   8   9.0  10.0  11\n",
      "2018-08-23  12  13.0  14.0  15\n",
      "2018-08-24  16  17.0  18.0  19\n",
      "2018-08-25  20  21.0  22.0  23\n"
     ]
    }
   ],
   "source": [
    "print(df.dropna(\n",
    "    axis=0, # 0对行进行操作;1对列进行操作\n",
    "    how='any' # 'any':只要存在NaN就drop掉；'all':必须全部是NaN才drop\n",
    "))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A   D\n",
      "2018-08-20   0   3\n",
      "2018-08-21   4   7\n",
      "2018-08-22   8  11\n",
      "2018-08-23  12  15\n",
      "2018-08-24  16  19\n",
      "2018-08-25  20  23\n"
     ]
    }
   ],
   "source": [
    "# 删除掉所有含有NaN的列\n",
    "print(df.dropna(\n",
    "    axis=1,\n",
    "    how='any'\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.3 替换NaN值为0或者其他"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             A     B     C   D\n",
      "2018-08-20   0   0.0   2.0   3\n",
      "2018-08-21   4   5.0   0.0   7\n",
      "2018-08-22   8   9.0  10.0  11\n",
      "2018-08-23  12  13.0  14.0  15\n",
      "2018-08-24  16  17.0  18.0  19\n",
      "2018-08-25  20  21.0  22.0  23\n"
     ]
    }
   ],
   "source": [
    "# 替换NaN值为0或者其他\n",
    "print(df.fillna(value=0))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.4 是否有缺失数据NaN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                A      B      C      D\n",
      "2018-08-20  False   True  False  False\n",
      "2018-08-21  False  False   True  False\n",
      "2018-08-22  False  False  False  False\n",
      "2018-08-23  False  False  False  False\n",
      "2018-08-24  False  False  False  False\n",
      "2018-08-25  False  False  False  False\n"
     ]
    }
   ],
   "source": [
    "# 是否有缺失数据NaN\n",
    "# 是否为空\n",
    "print(df.isnull())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                A      B      C      D\n",
      "2018-08-20  False   True  False  False\n",
      "2018-08-21  False  False   True  False\n",
      "2018-08-22  False  False  False  False\n",
      "2018-08-23  False  False  False  False\n",
      "2018-08-24  False  False  False  False\n",
      "2018-08-25  False  False  False  False\n"
     ]
    }
   ],
   "source": [
    "# 是否为NaN\n",
    "print(df.isna())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A    False\n",
      "B     True\n",
      "C     True\n",
      "D    False\n",
      "dtype: bool\n"
     ]
    }
   ],
   "source": [
    "# 检测某列是否有缺失数据NaN\n",
    "print(df.isnull().any())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "# 检测数据中是否存在NaN,如果存在就返回True\n",
    "print(np.any(df.isnull())==True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6.Pandas导入导出"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6.1 导入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    Student ID  name   age  gender\n",
      "0         1100  Kelly   22  Female\n",
      "1         1101    Clo   21  Female\n",
      "2         1102  Tilly   22  Female\n",
      "3         1103   Tony   24    Male\n",
      "4         1104  David   20    Male\n",
      "5         1105  Catty   22  Female\n",
      "6         1106      M    3  Female\n",
      "7         1107      N   43    Male\n",
      "8         1108      A   13    Male\n",
      "9         1109      S   12    Male\n",
      "10        1110  David   33    Male\n",
      "11        1111     Dw    3  Female\n",
      "12        1112      Q   23    Male\n",
      "13        1113      W   21  Female\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd # 加载模块\n",
    "# 读取csv\n",
    "data = pd.read_csv('student.csv')\n",
    "# 打印出data\n",
    "print(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   Student ID  name   age  gender\n",
      "0        1100  Kelly   22  Female\n",
      "1        1101    Clo   21  Female\n",
      "2        1102  Tilly   22  Female\n"
     ]
    }
   ],
   "source": [
    "# 前三行\n",
    "print(data.head(3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    Student ID name   age  gender\n",
      "11        1111    Dw    3  Female\n",
      "12        1112     Q   23    Male\n",
      "13        1113     W   21  Female\n"
     ]
    }
   ],
   "source": [
    "# 后三行\n",
    "print(data.tail(3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6.2 导出数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将资料存取成pickle\n",
    "data.to_pickle('student.pickle')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    Student ID  name   age  gender\n",
      "0         1100  Kelly   22  Female\n",
      "1         1101    Clo   21  Female\n",
      "2         1102  Tilly   22  Female\n",
      "3         1103   Tony   24    Male\n",
      "4         1104  David   20    Male\n",
      "5         1105  Catty   22  Female\n",
      "6         1106      M    3  Female\n",
      "7         1107      N   43    Male\n",
      "8         1108      A   13    Male\n",
      "9         1109      S   12    Male\n",
      "10        1110  David   33    Male\n",
      "11        1111     Dw    3  Female\n",
      "12        1112      Q   23    Male\n",
      "13        1113      W   21  Female\n"
     ]
    }
   ],
   "source": [
    "# 读取pickle文件并打印\n",
    "print(pd.read_pickle('student.pickle'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7.Pandas合并操作"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 7.1 Pandas合并concat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d\n",
      "0  0.0  0.0  0.0  0.0\n",
      "1  0.0  0.0  0.0  0.0\n",
      "2  0.0  0.0  0.0  0.0\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "# 定义资料集\n",
    "df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'])\n",
    "df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d'])\n",
    "df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d'])\n",
    "print(df1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d\n",
      "0  1.0  1.0  1.0  1.0\n",
      "1  1.0  1.0  1.0  1.0\n",
      "2  1.0  1.0  1.0  1.0\n"
     ]
    }
   ],
   "source": [
    "print(df2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d\n",
      "0  2.0  2.0  2.0  2.0\n",
      "1  2.0  2.0  2.0  2.0\n",
      "2  2.0  2.0  2.0  2.0\n"
     ]
    }
   ],
   "source": [
    "print(df3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d\n",
      "0  0.0  0.0  0.0  0.0\n",
      "1  0.0  0.0  0.0  0.0\n",
      "2  0.0  0.0  0.0  0.0\n",
      "0  1.0  1.0  1.0  1.0\n",
      "1  1.0  1.0  1.0  1.0\n",
      "2  1.0  1.0  1.0  1.0\n",
      "0  2.0  2.0  2.0  2.0\n",
      "1  2.0  2.0  2.0  2.0\n",
      "2  2.0  2.0  2.0  2.0\n"
     ]
    }
   ],
   "source": [
    "# concat纵向合并\n",
    "res = pd.concat([df1,df2,df3],axis=0)\n",
    "\n",
    "# 打印结果\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d\n",
      "0  0.0  0.0  0.0  0.0\n",
      "1  0.0  0.0  0.0  0.0\n",
      "2  0.0  0.0  0.0  0.0\n",
      "3  1.0  1.0  1.0  1.0\n",
      "4  1.0  1.0  1.0  1.0\n",
      "5  1.0  1.0  1.0  1.0\n",
      "6  2.0  2.0  2.0  2.0\n",
      "7  2.0  2.0  2.0  2.0\n",
      "8  2.0  2.0  2.0  2.0\n"
     ]
    }
   ],
   "source": [
    "# 上述合并过程中，index重复，下面给出重置index方法\n",
    "# 只需要将index_ignore设定为True即可\n",
    "res = pd.concat([df1,df2,df3],axis=0,ignore_index=True)\n",
    "\n",
    "# 打印结果\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d\n",
      "1  0.0  0.0  0.0  0.0\n",
      "2  0.0  0.0  0.0  0.0\n",
      "3  0.0  0.0  0.0  0.0\n"
     ]
    }
   ],
   "source": [
    "# join 合并方式\n",
    "#定义资料集\n",
    "df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3])\n",
    "df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b','c','d','e'], index=[2,3,4])\n",
    "print(df1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     b    c    d    e\n",
      "2  1.0  1.0  1.0  1.0\n",
      "3  1.0  1.0  1.0  1.0\n",
      "4  1.0  1.0  1.0  1.0\n"
     ]
    }
   ],
   "source": [
    "print(df2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d    e\n",
      "1  0.0  0.0  0.0  0.0  NaN\n",
      "2  0.0  0.0  0.0  0.0  NaN\n",
      "3  0.0  0.0  0.0  0.0  NaN\n",
      "2  NaN  1.0  1.0  1.0  1.0\n",
      "3  NaN  1.0  1.0  1.0  1.0\n",
      "4  NaN  1.0  1.0  1.0  1.0\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "join='outer',函数默认为join='outer'。此方法是依照column来做纵向合并，有相同的column上下合并在一起，\n",
    "其他独自的column各自成列，原来没有值的位置皆为NaN填充。\n",
    "'''\n",
    "# 纵向\"外\"合并df1与df2\n",
    "res = pd.concat([df1,df2],axis=0,join='outer')\n",
    "\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d    e\n",
      "0  0.0  0.0  0.0  0.0  NaN\n",
      "1  0.0  0.0  0.0  0.0  NaN\n",
      "2  0.0  0.0  0.0  0.0  NaN\n",
      "3  NaN  1.0  1.0  1.0  1.0\n",
      "4  NaN  1.0  1.0  1.0  1.0\n",
      "5  NaN  1.0  1.0  1.0  1.0\n"
     ]
    }
   ],
   "source": [
    "# 修改index\n",
    "res = pd.concat([df1,df2],axis=0,join='outer',ignore_index=True)\n",
    "\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     b    c    d\n",
      "1  0.0  0.0  0.0\n",
      "2  0.0  0.0  0.0\n",
      "3  0.0  0.0  0.0\n",
      "2  1.0  1.0  1.0\n",
      "3  1.0  1.0  1.0\n",
      "4  1.0  1.0  1.0\n"
     ]
    }
   ],
   "source": [
    "# join='inner'合并相同的字段\n",
    "# 纵向\"内\"合并df1与df2\n",
    "res = pd.concat([df1,df2],axis=0,join='inner')\n",
    "# 打印结果\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d\n",
      "1  0.0  0.0  0.0  0.0\n",
      "2  0.0  0.0  0.0  0.0\n",
      "3  0.0  0.0  0.0  0.0\n"
     ]
    }
   ],
   "source": [
    "# join_axes(依照axes合并)\n",
    "#定义资料集\n",
    "df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3])\n",
    "df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b','c','d','e'], index=[2,3,4])\n",
    "print(df1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     b    c    d    e\n",
      "2  1.0  1.0  1.0  1.0\n",
      "3  1.0  1.0  1.0  1.0\n",
      "4  1.0  1.0  1.0  1.0\n"
     ]
    }
   ],
   "source": [
    "print(df2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d    b    c    d    e\n",
      "1  0.0  0.0  0.0  0.0  NaN  NaN  NaN  NaN\n",
      "2  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0\n",
      "3  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0\n"
     ]
    }
   ],
   "source": [
    "# 依照df1.index进行横向合并\n",
    "res = pd.concat([df1,df2],axis=1,join_axes=[df1.index])\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d    b    c    d    e\n",
      "1  0.0  0.0  0.0  0.0  NaN  NaN  NaN  NaN\n",
      "2  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0\n",
      "3  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0\n",
      "4  NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0\n"
     ]
    }
   ],
   "source": [
    "# 移除join_axes参数,打印结果\n",
    "res = pd.concat([df1,df2],axis=1)\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d\n",
      "0  0.0  0.0  0.0  0.0\n",
      "1  0.0  0.0  0.0  0.0\n",
      "2  0.0  0.0  0.0  0.0\n",
      "3  1.0  1.0  1.0  1.0\n",
      "4  1.0  1.0  1.0  1.0\n",
      "5  1.0  1.0  1.0  1.0\n"
     ]
    }
   ],
   "source": [
    "# append(添加数据)\n",
    "# append只有纵向合并，没有横向合并\n",
    "#定义资料集\n",
    "df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'])\n",
    "df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d'])\n",
    "df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d'])\n",
    "s1 = pd.Series([1,2,3,4], index=['a','b','c','d'])\n",
    "# 将df2合并到df1下面,以及重置index,并打印出结果\n",
    "res = df1.append(df2,ignore_index=True)\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d\n",
      "0  0.0  0.0  0.0  0.0\n",
      "1  0.0  0.0  0.0  0.0\n",
      "2  0.0  0.0  0.0  0.0\n",
      "3  1.0  1.0  1.0  1.0\n",
      "4  1.0  1.0  1.0  1.0\n",
      "5  1.0  1.0  1.0  1.0\n",
      "6  2.0  2.0  2.0  2.0\n",
      "7  2.0  2.0  2.0  2.0\n",
      "8  2.0  2.0  2.0  2.0\n"
     ]
    }
   ],
   "source": [
    "# 合并多个df,将df2与df3合并至df1的下面,以及重置index,并打印出结果\n",
    "res = df1.append([df2,df3], ignore_index=True)\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d\n",
      "0  0.0  0.0  0.0  0.0\n",
      "1  0.0  0.0  0.0  0.0\n",
      "2  0.0  0.0  0.0  0.0\n",
      "3  1.0  2.0  3.0  4.0\n"
     ]
    }
   ],
   "source": [
    "# 合并series,将s1合并至df1，以及重置index，并打印结果\n",
    "res = df1.append(s1,ignore_index=True)\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     a    b    c    d\n",
      "0  0.0  0.0  0.0  0.0\n",
      "1  0.0  0.0  0.0  0.0\n",
      "2  0.0  0.0  0.0  0.0\n",
      "3  1.0  1.0  1.0  1.0\n",
      "4  1.0  1.0  1.0  1.0\n",
      "5  1.0  1.0  1.0  1.0\n",
      "6  2.0  2.0  2.0  2.0\n",
      "7  2.0  2.0  2.0  2.0\n",
      "8  2.0  2.0  2.0  2.0\n",
      "     a    b    c    d\n",
      "0  0.0  0.0  0.0  0.0\n",
      "1  0.0  0.0  0.0  0.0\n",
      "2  0.0  0.0  0.0  0.0\n",
      "3  1.0  1.0  1.0  1.0\n",
      "4  1.0  1.0  1.0  1.0\n",
      "5  1.0  1.0  1.0  1.0\n",
      "6  2.0  2.0  2.0  2.0\n",
      "7  2.0  2.0  2.0  2.0\n",
      "8  2.0  2.0  2.0  2.0\n"
     ]
    }
   ],
   "source": [
    "# 总结:两种常用合并方式\n",
    "res = pd.concat([df1, df2, df3], axis=0, ignore_index=True)\n",
    "res1 = df1.append([df2, df3], ignore_index=True)\n",
    "print(res)\n",
    "print(res1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 7.2.Pandas 合并 merge"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 7.2.1 定义资料集并打印出"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    A   B key\n",
      "0  A0  B0  K0\n",
      "1  A1  B1  K1\n",
      "2  A2  B2  K2\n",
      "3  A3  B3  K3\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "# 依据一组key合并\n",
    "# 定义资料集并打印出\n",
    "left = pd.DataFrame({'key' : ['K0','K1','K2','K3'],\n",
    "                     'A' : ['A0','A1','A2','A3'],\n",
    "                     'B' : ['B0','B1','B2','B3']})\n",
    "\n",
    "right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],\n",
    "                      'C' : ['C0', 'C1', 'C2', 'C3'],\n",
    "                      'D' : ['D0', 'D1', 'D2', 'D3']})\n",
    "print(left)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    C   D key\n",
      "0  C0  D0  K0\n",
      "1  C1  D1  K1\n",
      "2  C2  D2  K2\n",
      "3  C3  D3  K3\n"
     ]
    }
   ],
   "source": [
    "print(right)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 7.2.2 依据key column合并,并打印"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    A   B key   C   D\n",
      "0  A0  B0  K0  C0  D0\n",
      "1  A1  B1  K1  C1  D1\n",
      "2  A2  B2  K2  C2  D2\n",
      "3  A3  B3  K3  C3  D3\n"
     ]
    }
   ],
   "source": [
    "# 依据key column合并,并打印\n",
    "res = pd.merge(left,right,on='key')\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    A   B key1 key2\n",
      "0  A0  B0   K0   K0\n",
      "1  A1  B1   K0   K1\n",
      "2  A2  B2   K1   K0\n",
      "3  A3  B3   K2   K1\n"
     ]
    }
   ],
   "source": [
    "#  依据两组key合并\n",
    "#定义资料集并打印出\n",
    "left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],\n",
    "                      'key2': ['K0', 'K1', 'K0', 'K1'],\n",
    "                      'A': ['A0', 'A1', 'A2', 'A3'],\n",
    "                      'B': ['B0', 'B1', 'B2', 'B3']})\n",
    "right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],\n",
    "                       'key2': ['K0', 'K0', 'K0', 'K0'],\n",
    "                       'C': ['C0', 'C1', 'C2', 'C3'],\n",
    "                       'D': ['D0', 'D1', 'D2', 'D3']})\n",
    "print(left)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    C   D key1 key2\n",
      "0  C0  D0   K0   K0\n",
      "1  C1  D1   K1   K0\n",
      "2  C2  D2   K1   K0\n",
      "3  C3  D3   K2   K0\n"
     ]
    }
   ],
   "source": [
    "print(right)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 7.2.3 两列合并"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    A   B key1 key2   C   D\n",
      "0  A0  B0   K0   K0  C0  D0\n",
      "1  A2  B2   K1   K0  C1  D1\n",
      "2  A2  B2   K1   K0  C2  D2\n"
     ]
    }
   ],
   "source": [
    "# 依据key1与key2 columns进行合并，并打印出四种结果['left', 'right', 'outer', 'inner']\n",
    "res = pd.merge(left, right, on=['key1', 'key2'], how='inner')\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     A    B key1 key2    C    D\n",
      "0   A0   B0   K0   K0   C0   D0\n",
      "1   A1   B1   K0   K1  NaN  NaN\n",
      "2   A2   B2   K1   K0   C1   D1\n",
      "3   A2   B2   K1   K0   C2   D2\n",
      "4   A3   B3   K2   K1  NaN  NaN\n",
      "5  NaN  NaN   K2   K0   C3   D3\n"
     ]
    }
   ],
   "source": [
    "res = pd.merge(left, right, on=['key1', 'key2'], how='outer')\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    A   B key1 key2    C    D\n",
      "0  A0  B0   K0   K0   C0   D0\n",
      "1  A1  B1   K0   K1  NaN  NaN\n",
      "2  A2  B2   K1   K0   C1   D1\n",
      "3  A2  B2   K1   K0   C2   D2\n",
      "4  A3  B3   K2   K1  NaN  NaN\n"
     ]
    }
   ],
   "source": [
    "res = pd.merge(left, right, on=['key1', 'key2'], how='left')\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     A    B key1 key2   C   D\n",
      "0   A0   B0   K0   K0  C0  D0\n",
      "1   A2   B2   K1   K0  C1  D1\n",
      "2   A2   B2   K1   K0  C2  D2\n",
      "3  NaN  NaN   K2   K0  C3  D3\n"
     ]
    }
   ],
   "source": [
    "res = pd.merge(left, right, on=['key1', 'key2'], how='right')\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 7.2.4 Indicator设置合并列名称"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   col1 col_left\n",
      "0     0        a\n",
      "1     1        b\n"
     ]
    }
   ],
   "source": [
    "# Indicator\n",
    "df1 = pd.DataFrame({'col1':[0,1],'col_left':['a','b']})\n",
    "df2 = pd.DataFrame({'col1':[1,2,2],'col_right':[2,2,2]})\n",
    "print(df1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   col1  col_right\n",
      "0     1          2\n",
      "1     2          2\n",
      "2     2          2\n"
     ]
    }
   ],
   "source": [
    "print(df2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   col1 col_left  col_right      _merge\n",
      "0     0        a        NaN   left_only\n",
      "1     1        b        2.0        both\n",
      "2     2      NaN        2.0  right_only\n",
      "3     2      NaN        2.0  right_only\n"
     ]
    }
   ],
   "source": [
    "# 依据col1进行合并,并启用indicator=True,最后打印\n",
    "res = pd.merge(df1,df2,on='col1',how='outer',indicator=True)\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   col1 col_left  col_right indicator_column\n",
      "0     0        a        NaN        left_only\n",
      "1     1        b        2.0             both\n",
      "2     2      NaN        2.0       right_only\n",
      "3     2      NaN        2.0       right_only\n"
     ]
    }
   ],
   "source": [
    "# 自定义indicator column的名称,并打印出\n",
    "res = pd.merge(df1,df2,on='col1',how='outer',indicator='indicator_column')\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 7.2.5 依据index合并"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     A   B\n",
      "K0  A0  B0\n",
      "K1  A1  B1\n",
      "K2  A2  B2\n"
     ]
    }
   ],
   "source": [
    "# 依据index合并\n",
    "#定义资料集并打印出\n",
    "left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],\n",
    "                     'B': ['B0', 'B1', 'B2']},\n",
    "                     index=['K0', 'K1', 'K2'])\n",
    "right = pd.DataFrame({'C': ['C0', 'C2', 'C3'],\n",
    "                      'D': ['D0', 'D2', 'D3']},\n",
    "                     index=['K0', 'K2', 'K3'])\n",
    "print(left)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     C   D\n",
      "K0  C0  D0\n",
      "K2  C2  D2\n",
      "K3  C3  D3\n"
     ]
    }
   ],
   "source": [
    "print(right)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      A    B    C    D\n",
      "K0   A0   B0   C0   D0\n",
      "K1   A1   B1  NaN  NaN\n",
      "K2   A2   B2   C2   D2\n",
      "K3  NaN  NaN   C3   D3\n"
     ]
    }
   ],
   "source": [
    "# 依据左右资料集的index进行合并,how='outer',并打印\n",
    "res = pd.merge(left,right,left_index=True,right_index=True,how='outer')\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     A   B   C   D\n",
      "K0  A0  B0  C0  D0\n",
      "K2  A2  B2  C2  D2\n"
     ]
    }
   ],
   "source": [
    "# 依据左右资料集的index进行合并,how='inner',并打印\n",
    "res = pd.merge(left,right,left_index=True,right_index=True,how='inner')\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 7.2.6 解决overlapping的问题"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   age   k\n",
      "0    1  K0\n",
      "1    2  K1\n",
      "2    3  K2\n"
     ]
    }
   ],
   "source": [
    "# 解决overlapping的问题\n",
    "#定义资料集\n",
    "boys = pd.DataFrame({'k': ['K0', 'K1', 'K2'], 'age': [1, 2, 3]})\n",
    "girls = pd.DataFrame({'k': ['K0', 'K0', 'K3'], 'age': [4, 5, 6]})\n",
    "print(boys)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   age   k\n",
      "0    4  K0\n",
      "1    5  K0\n",
      "2    6  K3\n"
     ]
    }
   ],
   "source": [
    "print(girls)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   age_boy   k  age_girl\n",
      "0        1  K0         4\n",
      "1        1  K0         5\n"
     ]
    }
   ],
   "source": [
    "# 使用suffixes解决overlapping的问题\n",
    "# 比如将上面两个合并时,age重复了,则可通过suffixes设置,以此保证不重复,不同名\n",
    "res = pd.merge(boys,girls,on='k',suffixes=['_boy','_girl'],how='inner')\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8.Pandas plot出图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0      0.143408\n",
      "1     -1.936116\n",
      "2     -1.488609\n",
      "3      1.372508\n",
      "4     -0.907693\n",
      "5      0.665021\n",
      "6     -0.629525\n",
      "7     -0.470715\n",
      "8     -1.059255\n",
      "9     -1.688154\n",
      "10    -0.254145\n",
      "11    -0.070213\n",
      "12     0.057894\n",
      "13    -0.805895\n",
      "14     1.688675\n",
      "15     0.241852\n",
      "16    -0.967129\n",
      "17    -1.422592\n",
      "18     0.873210\n",
      "19     1.629350\n",
      "20    -0.248667\n",
      "21    -0.871348\n",
      "22     0.088175\n",
      "23     0.796791\n",
      "24    -0.457708\n",
      "25    -1.453474\n",
      "26     1.997726\n",
      "27    -1.877039\n",
      "28    -0.601735\n",
      "29    -0.659616\n",
      "         ...   \n",
      "970   -1.093692\n",
      "971    0.059065\n",
      "972   -0.657221\n",
      "973    0.452148\n",
      "974   -0.487552\n",
      "975    0.375511\n",
      "976    0.287918\n",
      "977    1.351101\n",
      "978    1.799478\n",
      "979   -0.372078\n",
      "980   -1.320401\n",
      "981   -2.115900\n",
      "982   -1.617493\n",
      "983   -2.343383\n",
      "984    2.155813\n",
      "985    0.031667\n",
      "986   -1.021759\n",
      "987    0.948910\n",
      "988    1.464946\n",
      "989   -0.296323\n",
      "990    0.071010\n",
      "991   -0.087358\n",
      "992   -0.580351\n",
      "993   -1.497217\n",
      "994   -0.459714\n",
      "995    0.125293\n",
      "996    0.803825\n",
      "997    0.327007\n",
      "998   -1.617468\n",
      "999   -0.115447\n",
      "Length: 1000, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "data = pd.Series(np.random.randn(1000), index=np.arange(1000))\n",
    "print(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0       0.143408\n",
      "1      -1.792708\n",
      "2      -3.281317\n",
      "3      -1.908809\n",
      "4      -2.816503\n",
      "5      -2.151481\n",
      "6      -2.781007\n",
      "7      -3.251721\n",
      "8      -4.310977\n",
      "9      -5.999131\n",
      "10     -6.253275\n",
      "11     -6.323489\n",
      "12     -6.265594\n",
      "13     -7.071490\n",
      "14     -5.382814\n",
      "15     -5.140962\n",
      "16     -6.108091\n",
      "17     -7.530683\n",
      "18     -6.657472\n",
      "19     -5.028122\n",
      "20     -5.276789\n",
      "21     -6.148137\n",
      "22     -6.059962\n",
      "23     -5.263171\n",
      "24     -5.720880\n",
      "25     -7.174354\n",
      "26     -5.176628\n",
      "27     -7.053667\n",
      "28     -7.655402\n",
      "29     -8.315018\n",
      "         ...    \n",
      "970    22.363987\n",
      "971    22.423053\n",
      "972    21.765832\n",
      "973    22.217979\n",
      "974    21.730427\n",
      "975    22.105938\n",
      "976    22.393856\n",
      "977    23.744957\n",
      "978    25.544435\n",
      "979    25.172357\n",
      "980    23.851955\n",
      "981    21.736056\n",
      "982    20.118563\n",
      "983    17.775180\n",
      "984    19.930993\n",
      "985    19.962660\n",
      "986    18.940901\n",
      "987    19.889810\n",
      "988    21.354757\n",
      "989    21.058433\n",
      "990    21.129443\n",
      "991    21.042085\n",
      "992    20.461734\n",
      "993    18.964517\n",
      "994    18.504803\n",
      "995    18.630096\n",
      "996    19.433921\n",
      "997    19.760929\n",
      "998    18.143460\n",
      "999    18.028013\n",
      "Length: 1000, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(data.cumsum())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f5de979fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# data本来就是一个数据，所以我们可以直接plot\n",
    "data.plot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f5de9112b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# np.random.randn(1000,4) 随机生成1000行4列数据\n",
    "# list(\"ABCD\")会变为['A','B','C','D']\n",
    "data = pd.DataFrame(\n",
    "    np.random.randn(1000,4),\n",
    "    index=np.arange(1000),\n",
    "    columns=list(\"ABCD\")\n",
    ")\n",
    "data.cumsum()\n",
    "data.plot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f5deb69b00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = data.plot.scatter(x='A',y='B',color='DarkBlue',label='Class1')\n",
    "# 将之下这个 data 画在上一个 ax 上面\n",
    "data.plot.scatter(x='A',y='C',color='LightGreen',label='Class2',ax=ax)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 9.学习来源"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
